<?php if (!defined('ABSPATH')) {
  die;
}
/**
 *
 * Get icons from admin ajax
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if (!function_exists('csf_get_icons')) {
  function csf_get_icons()
  {

    $nonce = (!empty($_POST['nonce'])) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';

    if (!wp_verify_nonce($nonce, 'csf_icon_nonce')) {
      wp_send_json_error(array('error' => esc_html__('Error: Invalid nonce verification.', 'csf')));
    }

    ob_start();

    $icon_library = (apply_filters('csf_fa4', false)) ? 'fa4' : 'fa5';

    CSF::include_plugin_file('fields/icon/' . $icon_library . '-icons.php');

    $icon_lists = apply_filters('csf_field_icon_add_icons', csf_get_default_icons());

    if (!empty($icon_lists)) {

      foreach ($icon_lists as $list) {

        echo (count($icon_lists) >= 2) ? '<div class="csf-icon-title">' . esc_attr($list['title']) . '</div>' : '';

        foreach ($list['icons'] as $icon) {
          echo '<i title="' . esc_attr($icon) . '" class="' . esc_attr($icon) . '"></i>';
        }
      }
    } else {

      echo '<div class="csf-error-text">' . esc_html__('No data available.', 'csf') . '</div>';
    }

    $content = ob_get_clean();

    wp_send_json_success(array('content' => $content));
  }
  add_action('wp_ajax_csf-get-icons', 'csf_get_icons');
}

/**
 *
 * Export
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if (!function_exists('csf_export')) {
  function csf_export()
  {

    $nonce  = (!empty($_GET['nonce'])) ? sanitize_text_field(wp_unslash($_GET['nonce'])) : '';
    $unique = (!empty($_GET['unique'])) ? sanitize_text_field(wp_unslash($_GET['unique'])) : '';

    if (!wp_verify_nonce($nonce, 'csf_backup_nonce')) {
      die(esc_html__('Error: Invalid nonce verification.', 'csf'));
    }

    if (empty($unique)) {
      die(esc_html__('Error: Invalid key.', 'csf'));
    }

    // Export
    header('Content-Type: application/json');
    header('Content-disposition: attachment; filename=backup-' . gmdate('d-m-Y') . '.json');
    header('Content-Transfer-Encoding: binary');
    header('Pragma: no-cache');
    header('Expires: 0');

    echo json_encode(get_option($unique));

    die();
  }
  add_action('wp_ajax_csf-export', 'csf_export');
}

/**
 *
 * Import Ajax
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if (!function_exists('csf_import_ajax')) {
  function csf_import_ajax()
  {

    $nonce  = (!empty($_POST['nonce'])) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
    $unique = (!empty($_POST['unique'])) ? sanitize_text_field(wp_unslash($_POST['unique'])) : '';
    $data   = (!empty($_POST['data'])) ? wp_kses_post_deep(json_decode(wp_unslash(trim($_POST['data'])), true)) : array();

    if (!wp_verify_nonce($nonce, 'csf_backup_nonce')) {
      wp_send_json_error(array('error' => esc_html__('Error: Invalid nonce verification.', 'csf')));
    }

    if (empty($unique)) {
      wp_send_json_error(array('error' => esc_html__('Error: Invalid key.', 'csf')));
    }

    if (empty($data) || !is_array($data)) {
      wp_send_json_error(array('error' => esc_html__('Error: The response is not a valid JSON response.', 'csf')));
    }

    // Success
    update_option($unique, $data);

    wp_send_json_success();
  }
  add_action('wp_ajax_csf-import', 'csf_import_ajax');
}

/**
 *
 * Reset Ajax
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if (!function_exists('csf_reset_ajax')) {
  function csf_reset_ajax()
  {

    $nonce  = (!empty($_POST['nonce'])) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
    $unique = (!empty($_POST['unique'])) ? sanitize_text_field(wp_unslash($_POST['unique'])) : '';

    if (!wp_verify_nonce($nonce, 'csf_backup_nonce')) {
      wp_send_json_error(array('error' => esc_html__('Error: Invalid nonce verification.', 'csf')));
    }

    // Success
    delete_option($unique);

    wp_send_json_success();
  }
  add_action('wp_ajax_csf-reset', 'csf_reset_ajax');
}

/**
 *
 * Chosen Ajax
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if (!function_exists('csf_chosen_ajax')) {
  function csf_chosen_ajax()
  {

    $nonce = (!empty($_POST['nonce'])) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
    $type  = (!empty($_POST['type'])) ? sanitize_text_field(wp_unslash($_POST['type'])) : '';
    $term  = (!empty($_POST['term'])) ? sanitize_text_field(wp_unslash($_POST['term'])) : '';
    $query = (!empty($_POST['query_args'])) ? wp_kses_post_deep($_POST['query_args']) : array();

    if (!wp_verify_nonce($nonce, 'csf_chosen_ajax_nonce')) {
      wp_send_json_error(array('error' => esc_html__('Error: Invalid nonce verification.', 'csf')));
    }

    if (empty($type) || empty($term)) {
      wp_send_json_error(array('error' => esc_html__('Error: Invalid term ID.', 'csf')));
    }

    $capability = apply_filters('csf_chosen_ajax_capability', 'manage_options');

    if (!current_user_can($capability)) {
      wp_send_json_error(array('error' => esc_html__('Error: You do not have permission to do that.', 'csf')));
    }

    // Success
    $options = CSF_Fields::field_data($type, $term, $query);

    wp_send_json_success($options);
  }
  add_action('wp_ajax_csf-chosen', 'csf_chosen_ajax');
}
